package Verwaltung.Daten;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class AktivitaetTest {

	/**
	 * 1. KONSTRUKTOR TEST I Alle Werte werden korrekt Eingegeben. I. Name II.
	 * Wochentag III. Start Stunde IV. Start Minute V. Dauer
	 */
	@Test
	public void test_aktivitaet_konstruktor_1() {
		final Aktivitaet t1 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		// I.
		assertEquals("name", t1.getName(), "mathe");
		// II.
		assertEquals("wochentag", t1.getWochentag(), "Montag");
		// III.
		assertEquals("startstunde", t1.getStartHour(), 1);
		// IV.
		assertEquals("startminute", t1.getStartMinute(), 40);
		// V.
		assertEquals("dauer", t1.getDauer(), 10);
	}

	/**
	 * 2. KONSTRUKTOR TEST II Ungueltige Eingaben I. Falscher Wochentag II. Zu
	 * hohe Start Stunde III. zu niedrige Start Stunde IV. Zu hohe Start Minute
	 * V. Zu niedrige Start Minute VI. Zu niedrige Dauer
	 */
	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_konstruktor_2() {
		// I.
		final Aktivitaet t2 = new Aktivitaet("mathe", "Dezember", 1, 40, 10);
	}

	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_konstruktor_3() {
		// II.
		final Aktivitaet t3 = new Aktivitaet("mathe", "Montag", 1000, 40, 10);
	}

	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_konstruktor_4() {
		// III.
		final Aktivitaet t4 = new Aktivitaet("mathe", "Montag", -11, 40, 10);
	}

	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_konstruktor_5() {
		// IV.
		final Aktivitaet t5 = new Aktivitaet("mathe", "Montag", 1, 1000, 10);
	}

	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_konstruktor_6() {
		// V.
		final Aktivitaet t6 = new Aktivitaet("mathe", "Montag", 1, -1, 10);
	}

	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_konstruktor_7() {
		// VI.
		final Aktivitaet t7 = new Aktivitaet("mathe", "Montag", 1, 40, 0);
	}

	/**
	 * 3. GETZEITRAUM TEST Korrekte Rueckgabe I. Einstellige Minuten II.
	 * Zweistellige Minuten
	 */
	@Test
	public void aktivitaet_getZeitraum_1() {
		// I.
		final Aktivitaet t8 = new Aktivitaet("mathe", "Montag", 1, 4, 10);
		assertEquals("zeitraum", t8.getZeitraum(), "1:04 - 11:04");
		// II.
		final Aktivitaet t9 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		assertEquals("zeitraum", t9.getZeitraum(), "1:40 - 11:40");
	}

	/**
	 * 4. SETSTART TEST I Korrekte Eingabe Alle 4 Varianten I. HH:MM II. H:MM
	 * III. HH IV. H
	 */
	@Test
	public void aktivitaet_setStart_1() {
		// I.
		final Aktivitaet t10 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		t10.setStart("12:34");
		assertEquals("HH:MM", t10.getStart(), "12:34");
		// II.
		final Aktivitaet t11 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		t11.setStart("2:34");
		assertEquals("H:MM", t11.getStart(), "2:34");
		// III.
		final Aktivitaet t12 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		t12.setStart("12");
		assertEquals("HH", t12.getStart(), "12:40");
		// IV.
		final Aktivitaet t13 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		t13.setStart("2");
		assertEquals("H", t13.getStart(), "2:40");
	}

	/**
	 * 5. SETSTART TEST II Ungueltige Eingaben I. Zu Lang II. Ungueltiges Format
	 * III. empty IV. Stunde zu hoch V. Minute zu hoch
	 */
	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_setStart_2() {
		// I.
		final Aktivitaet t14 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		t14.setStart("1212:3403");
		// II.
		final Aktivitaet t15 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		t15.setStart("affe");
		// III.
		final String banane = "banane";
		final Aktivitaet t16 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		t16.setStart(banane);
		// IV.
		final Aktivitaet t17 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		t17.setStart("25");
		// V.
		final Aktivitaet t18 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		t18.setStart("12:69");
	}

	/**
	 * 6. SETDAUER TEST I Gueltige Eingabe I. Einstellig II. Mehrstellig
	 */
	@Test
	public void aktivitaet_setDauer_1() {
		// I.
		final Aktivitaet t19 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		t19.setDauer("3");
		assertEquals("einstellige dauer", t19.getDauer(), 3);
		// II.
		final Aktivitaet t20 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		t20.setDauer("13");
		assertEquals("einstellige dauer", t20.getDauer(), 13);
	}

	/**
	 * 7. SETDAUER TEST II Ungueltige Eingaben I. Buchstaben als Eingabe
	 */
	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_setDauer_2() {
		// I.
		final Aktivitaet t21 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		t21.setDauer("ab");
	}

	/**
	 * 8. ADDKLASSE TEST I Gueltige Eingabe I. Klasse wird hinzugefügt
	 */
	@Test
	public void aktivitaet_addKlasse_1() {
		// I.
		final Aktivitaet t22 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		final Klasse k1 = new Klasse("k1");
		t22.addKlasse(k1);
		assertEquals("klasse", t22.getKlassen().contains(k1), true);
	}

	/**
	 * 9. ADDKLASSE TEST II Ungueltige Eingabe I. Klasse ist null
	 */
	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_addKlasse_2() {
		// I.
		final Aktivitaet t23 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		final Klasse k2 = null;
		t23.addKlasse(k2);
	}

	/**
	 * 10. ADDKLASSE TEST II Ungueltige Eingabe I. Klasse ist null
	 */
	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_addKlasse_3() {
		// I.
		final Aktivitaet t24 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		final Klasse k3 = new Klasse("k3");
		t24.addKlasse(k3);
		t24.addKlasse(k3);
	}

	/**
	 * 11. ADDLEHRKRAFT TEST I Gueltige Eingabe I. Lehrer II. Betreuer III.
	 * Nicht enthalten
	 */
	@Test
	public void aktivitaet_addLehrkraft_1() {
		// I.
		final Aktivitaet t25 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		final Lehrer l1 = new Lehrer("hans", 16, "hans peter", "peter", 0);
		t25.addLehrkraft(l1);
		assertEquals("lehrer", t25.getLehrkraefte().contains(l1), true);
		// II.
		final Aktivitaet t26 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		final Betreuer b1 = new Betreuer("peter", 16, "peter hans", "hans", 0);
		t26.addLehrkraft(b1);
		assertEquals("betreuer", t26.getLehrkraefte().contains(b1), true);
		// III.
		assertEquals("Nicht enthalten", t25.getLehrkraefte().contains(b1),
				false);
	}

	/**
	 * 12. ADDLEHRKRAFT TEST II Ungueltige Eingabe I. Lehrkraft ist null
	 */
	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_addLehrkraft_2() {
		// I.
		final Aktivitaet t27 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		final Lehrer l2 = null;
		t27.addLehrkraft(l2);
	}

	/**
	 * 13. ADDLEHRKRAFT TEST III Ungueltige Eingabe I. Lehrkraft ist bereits
	 * vorhanden
	 */
	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_addLehrkraft_3() {
		// I.
		final Aktivitaet t28 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		final Lehrer l3 = new Lehrer("hans", 16, "hans peter", "peter", 0);
		t28.addLehrkraft(l3);
		t28.addLehrkraft(l3);
	}

	/**
	 * 14. REMOVEKLASSE TEST I Gueltige Eingabe I. remove Klasse
	 */
	@Test
	public void aktivitaet_removeKlasse_1() {
		// I.
		final Aktivitaet t29 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		final Klasse k4 = new Klasse("k4");
		t29.addKlasse(k4);
		t29.removeKlasse(k4);
		assertEquals("remove", t29.getKlassen().contains(k4), false);
	}

	/**
	 * 15. REMOVE KLASSE TEST II Ungueltige Eingabe I. Klasse ist null
	 */
	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_removeKlasse_2() {
		// I.
		final Aktivitaet t30 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		final Klasse k5 = null;
		t30.removeKlasse(k5);
	}

	/**
	 * 15. REMOVE KLASSE TEST III Ungueltige Eingabe I. Klasse ist nicht
	 * vorhanden
	 */
	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_removeKlasse_3() {
		// I.
		final Aktivitaet t31 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		final Klasse k5 = new Klasse("k5");
		t31.removeKlasse(k5);
	}

	/**
	 * 16. REMOVELEHRKRAFT TEST I Gueltige Eingabe I. Lehrer II. Betreuer
	 */
	@Test
	public void aktivitaet_removeLehrkraft_1() {
		// I.
		final Aktivitaet t32 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		final Lehrer l4 = new Lehrer("hans", 16, "hans peter", "peter", 0);
		t32.addLehrkraft(l4);
		t32.removeLehrkraft(l4);
		assertEquals("lehrkraft", t32.getLehrkraefte().contains(l4), false);
		// II.
		final Aktivitaet t33 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		final Betreuer b2 = new Betreuer("peter", 16, "peter hans", "hans", 0);
		t33.addLehrkraft(b2);
		t33.removeLehrkraft(b2);
		assertEquals("lehrkraft", t32.getLehrkraefte().contains(b2), false);
	}

	/**
	 * 17. REMOVELEHRKRAFT TEST II Ungueltige Eingabe I. Lehrkraft ist null
	 */
	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_removeLehrkraft_2() {
		// I.
		final Aktivitaet t32 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		final Lehrer l5 = null;
		t32.removeLehrkraft(l5);

	}

	/**
	 * 18. REMOVELEHRKRAFT TEST III Ungueltige Eingabe I. Lehrkraft ist nicht
	 * vorhanden
	 */
	@Test(expected = IllegalArgumentException.class)
	public void aktivitaet_removeLehrkraft_3() {
		// I.
		final Aktivitaet t32 = new Aktivitaet("mathe", "Montag", 1, 40, 10);
		final Lehrer l6 = new Lehrer("hans", 16, "hans peter", "peter", 0);
		t32.removeLehrkraft(l6);

	}

}
